// //模板1 ： 排序 + 去重(unique) + 二分
// #include<iostream>
// #include<algorithm>

// using namespace std;
// const int N = 1e5 + 10;

// int n;
// int a[N];
// int pos;
// int disc[N];
// //二分查找位置
// int find(int x)
// {
//     int l = 1 , r = pos;
//     while(l < r)
//     {
//         int mid = (l + r) /2;
//         if(disc[mid] >= x) r = mid;
//         else l = mid + 1;
//     }
//     return l;
// }
// int main()
// {
//     cin >> n;
//     for(int i = 1;i <= n;i ++)
//     {
//         cin >> a[i];
//         disc[++pos] = a[i];
//     }

//     //离散化
//     sort(disc + 1 , disc + 1 + pos);
//     pos = unique(disc + 1 , disc + 1 + pos) - (disc + 1);

//     for(int i = 1;i <= n;i ++)
//     {
//         cout << a[i] << "离散化之后" << find(a[i]) << endl;
//     }
//     return 0;
// }

//模板2 ： 排序 + 哈希表去重
#include<iostream>
#include<algorithm>
#include<unordered_map>

using namespace std;

const int N = 1e5 + 10;

int n;
int a[N];

int pos;
int disc[N];
unordered_map<int,int>id;  //<原始的值, 离散化之后的值>

int main()
{
    cin >> n;
    for(int i = 1;i <= n;i ++)
    {
        cin >> a[i];
        disc[++pos] = a[i];
    }

    sort(disc + 1 , disc + 1 + pos);
    int cnt = 0;
    for(int i = 1;i <= pos;i ++)
    {
        int x = disc[i];
        if(id.count(x)) continue;
        cnt ++;
        id[x] = cnt;
    }
    for(int i = 1;i <= n;i ++)
    {
        cout << a[i] << "离散化之后的值：" << id[a[i]] << endl;
    }
    return 0;
}